就是解釋JAVA程式碼~
今天去參加一年一次"和風文化祭"
其實如果在日本的人也是可以去參加日本有關程式的活動~
連結如下~
回到正題~
今天要解釋的程式碼如下~是有包含兩個程式碼才可以跑出來
就是有父類跟子類
父類
程式碼
package Extends;
public class Master {
//參數以父類為主,可傳入父或子類物件
void feed(Animal a, Food f) {
//instanceof:比對物件的類型
if(a instanceof Animal) {
a.eat();
new Food().showName();
}
else if(a instanceof Dog) {
a.eat();
new Bone().showName();
}else if(a instanceof Cat) {
a.eat();
new Fish().showName();
}
}
}
//-----------------------------------
class Animal {
int a = 100;
void cry() {
System.out.println("動物不會叫");
}
void eat() {
System.out.println("動物吃肉");
}
}
class Dog extends Animal {
int a = 999;
void cry() {
System.out.println("狗狗汪汪叫");
}
void eat(){ System.out.println("狗狗吃肉骨頭"); }
}
class Cat extends Animal {
void cry() {
System.out.println("貓咪喵喵叫");
}
void eat() {
System.out.println("貓咪吃魚");
}
}
//-----------------------------------
class Food {
void showName() {
System.out.println("雜食");
}
}
class Fish extends Food {
void showName() {
System.out.println("魚");
}
}
class Bone extends Food {
void showName(){ System.out.println("肉骨頭"); }
}
子類
程式碼
package Extends;
public class MasterPoly {
public static void main(String[] args) {
//多型基本用法:方法的使用
//多型語法=> 父類型 變數名 = new 子類型();
//左:變數類型,有限制意思,限制子類物件只能使用父類型有定義的名稱,包括屬性(值)/方法
//右:實際操作的記憶體
Animal a1 = new Dog();
//Animal若沒有定義cry(),則a1物件無法呼叫
//若可執行,則會執行子類物件的方法內容
a1.cry();
//多型語法在操作屬性時,會使用左邊父類的屬性與值
System.out.println(a1.a);
// Food f1 = new Fish();
// f1.showName();
}
}
顯示
解釋程式碼
這段Java程式碼示範了繼承(Inheritance)和多態性(Polymorphism)的概念。我們來逐段解釋它:
Master
類別是主類別,裡面有一個 feed
方法,用來餵食動物。這個方法接受兩個參數,Animal a
和 Food f
,代表要餵食的動物和食物。
在 feed
方法中,使用 instanceof
運算符來比對傳入的 a
參數的類型。如果 a
是 Animal
的實例,就執行相對應的動作。如果是 Dog
,則給狗狗餵食骨頭;如果是 Cat
,則給貓咪餵食魚。
Animal
類別是基礎類別,它有一個 cry
方法和一個 eat
方法。所有的動物都有 cry
方法,但 eat
方法是一個通用的實作,顯示 "動物吃肉"。
Dog
和 Cat
類別是 Animal
類別的子類別,它們繼承了 Animal
類別的特性,但也覆寫了 cry
和 eat
方法。狗狗的 cry
方法顯示 "狗狗汪汪叫",並且覆寫了 eat
方法以顯示 "狗狗吃肉骨頭",而貓咪的 cry
方法顯示 "貓咪喵喵叫",並且覆寫了 eat
方法以顯示 "貓咪吃魚"。
Food
類別是食物的基礎類別,有一個 showName
方法,顯示 "雜食"。
Fish
和 Bone
類別是 Food
類別的子類別,它們覆寫了 showName
方法,分別顯示 "魚" 和 "肉骨頭"。
總結來說,這段程式碼示範了物件導向編程中的繼承和多態性概念。不同類別的物件可以共用相同的方法名稱,但根據其實際的類別,執行不同的行為。在 feed
方法中,根據傳入的動物類別,選擇適當的食物來餵食。
這個Java程式碼示範了多態性的基本概念。讓我們逐段解釋它:
在 MasterPoly
類別的 main
方法中,我們看到多態性的使用範例。
以下這行程式碼:
Animal a1 = new Dog();
這表示我們創建了一個 Animal
類別的參考變數 a1
,但我們實際上將它指向了一個 Dog
類別的物件。這就是多態性的一個重要特性,你可以使用父類別的參考變數來引用子類別的物件。
接下來,我們呼叫 a1.cry()
方法,即使 cry
方法是在 Animal
類別中定義的,但實際上執行的是 Dog
類別中覆寫(override)的 cry
方法。這是多態性的另一個示範,方法的執行取決於實際物件的類別。
最後,我們使用 System.out.println(a1.a)
來訪問 a1
的 a
屬性。注意,a
是在 Animal
類別中定義的,但即使我們將 a1
指向了一個 Dog
物件,它仍然訪問到的是 Animal
類別中的 a
屬性值。多態性在操作屬性時使用的是參考變數的類別中的屬性值。
總結來說,這段程式碼示範了多態性的核心概念,允許你使用父類別的參考變數來操作子類別的物件,並且在運行時決定實際執行的方法。
謝謝收看